package test;

import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.Set;

public class WebLoginAndGetToken {

    public static void main(String[] args) {
        // 如果 chromedriver 不在 PATH 中，需要指定路径，比如：
        System.setProperty("webdriver.chrome.driver", "D:\\smart\\smart-environmental-sanitation\\smart-master\\smart-admin\\src\\test\\resources\\chromedriver.exe");

        // 1. 启动 Chrome 浏览器
        WebDriver driver = new ChromeDriver();

        try {
            // 2. 打开登录页面
            driver.get("https://example.com/login"); // 替换为实际登录网址

            // 3. 等待页面加载（可显式等待更好，这里先简单用 sleep）
            Thread.sleep(2000);

            // 4. 定位用户名和密码输入框，并输入信息
            WebElement usernameField = driver.findElement(By.id("username")); // 根据实际情况改成 By.name, By.cssSelector 等
            WebElement passwordField = driver.findElement(By.id("password"));
            WebElement loginButton = driver.findElement(By.id("login-button")); // 或者 By.xpath, By.cssSelector

            usernameField.sendKeys("your_username");
            passwordField.sendKeys("your_password");

            // 5. 点击登录按钮
            loginButton.click();

            // 6. 等待登录跳转（建议用 WebDriverWait 更优雅，这里简化处理）
            Thread.sleep(5000); // 等待登录完成并跳转

            // =========================
            // 7. 尝试从 Cookie 中获取 Token
            Set<Cookie> cookies = driver.manage().getCookies();
            String token = null;
            for (Cookie cookie : cookies) {
                System.out.println("Cookie: " + cookie.getName() + " = " + cookie.getValue());
                if ("access_token".equals(cookie.getName()) || "token".equals(cookie.getName())) {
                    token = cookie.getValue();
                    break;
                }
            }

            if (token != null) {
                System.out.println("✅ 从 Cookie 中获取到 Token: " + token);
            } else {
                System.out.println("❌ 未在 Cookie 中找到 Token，尝试其他方式...");
                // 可以进一步尝试从 LocalStorage / SessionStorage 或抓包等方式获取
            }

            // =========================
            // 8. （可选）从 LocalStorage 获取 Token（需要执行 JS）
            /*
            JavascriptExecutor js = (JavascriptExecutor) driver;
            String localStorageToken = (String) js.executeScript(
                "return localStorage.getItem('token');"
            );
            if (localStorageToken != null) {
                System.out.println("✅ 从 LocalStorage 获取到 Token: " + localStorageToken);
            }
            */

            // 你可以根据实际情况提取 Token，比如：
            // - 从某个 URL 参数
            // - 从页面某个隐藏的 input 值
            // - 从网络请求的返回 JSON（需要抓包分析）

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 9. 关闭浏览器
            driver.quit();
        }
    }
}